home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ao / ao.h next >
C/C++ Source or Header  |  2005-10-18  |  4KB  |  151 lines

  1. /*
  2.  *
  3.  *  ao.h 
  4.  *    
  5.  *    Original Copyright (C) Aaron Holtzman - May 1999
  6.  *      Modifications Copyright (C) Stan Seibert - July 2000, July 2001
  7.  *      More Modifications Copyright (C) Jack Moffitt - October 2000
  8.  *
  9.  *  This file is part of libao, a cross-platform audio outputlibrary.  See
  10.  *  README for a history of this source code.
  11.  *
  12.  *  libao is free software; you can redistribute it and/or modify
  13.  *  it under the terms of the GNU General Public License as published by
  14.  *  the Free Software Foundation; either version 2, or (at your option)
  15.  *  any later version.
  16.  *
  17.  *  libao is distributed in the hope that it will be useful,
  18.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  *  GNU General Public License for more details.
  21.  *
  22.  *  You should have received a copy of the GNU General Public License
  23.  *  along with GNU Make; see the file COPYING.  If not, write to
  24.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.    
  25.  *
  26.  */
  27. #ifndef __AO_H__
  28. #define __AO_H__
  29.  
  30. #ifdef __cplusplus
  31. extern "C"
  32. {
  33. #endif /* __cplusplus */
  34.  
  35. #include <stdio.h>    
  36. #include <stdlib.h>
  37. #include <errno.h>
  38. #include "os_types.h"
  39.  
  40. /* --- Constants ---*/
  41.  
  42. #define AO_TYPE_LIVE 1
  43. #define AO_TYPE_FILE 2
  44.  
  45.  
  46. #define AO_ENODRIVER   1
  47. #define AO_ENOTFILE    2
  48. #define AO_ENOTLIVE    3
  49. #define AO_EBADOPTION  4
  50. #define AO_EOPENDEVICE 5
  51. #define AO_EOPENFILE   6
  52. #define AO_EFILEEXISTS 7
  53.  
  54. #define AO_EFAIL       100
  55.  
  56.  
  57. #define AO_FMT_LITTLE 1
  58. #define AO_FMT_BIG    2
  59. #define AO_FMT_NATIVE 4
  60.  
  61. /* --- Structures --- */
  62.  
  63. typedef struct ao_info {
  64.     int  type; /* live output or file output? */
  65.     char *name; /* full name of driver */
  66.     char *short_name; /* short name of driver */
  67.         char *author; /* driver author */
  68.     char *comment; /* driver comment */
  69.     int  preferred_byte_format;
  70.     int  priority;
  71.     char **options;
  72.     int  option_count;
  73. } ao_info;
  74.  
  75. typedef struct ao_functions ao_functions; /* Forward decl to make C happy */
  76.  
  77. typedef struct ao_device {
  78.     int  type; /* live output or file output? */
  79.     int  driver_id;
  80.     ao_functions *funcs;
  81.     FILE *file; /* File for output if this is a file driver */
  82.     int  client_byte_format;
  83.     int  machine_byte_format;
  84.     int  driver_byte_format;
  85.     char *swap_buffer;
  86.     int  swap_buffer_size; /* Bytes allocated to swap_buffer */
  87.     void *internal; /* Pointer to driver-specific data */
  88. } ao_device;
  89.  
  90. typedef struct ao_sample_format {
  91.     int bits; /* bits per sample */
  92.     int rate; /* samples per second (in a single channel) */
  93.     int channels; /* number of audio channels */
  94.     int byte_format; /* Byte ordering in sample, see constants below */
  95. } ao_sample_format;
  96.  
  97. struct ao_functions {
  98.     int (*test)(void);
  99.     ao_info* (*driver_info)(void);
  100.     int (*device_init)(ao_device *device);
  101.     int (*set_option)(ao_device *device, const char *key, 
  102.               const char *value);
  103.     int (*open)(ao_device *device, ao_sample_format *format);
  104.     int (*play)(ao_device *device, const char *output_samples,
  105.                uint_32 num_bytes);
  106.     int (*close)(ao_device *device);
  107.     void (*device_clear)(ao_device *device);
  108.     char* (*file_extension)(void);
  109. };
  110.  
  111. typedef struct ao_option {
  112.     char *key;
  113.     char *value;
  114.     struct ao_option *next;
  115. } ao_option;        
  116.  
  117. /* --- Functions --- */
  118.  
  119. /* library setup/teardown */
  120. void ao_initialize(void);
  121. void ao_shutdown(void);
  122.  
  123. /* device setup/playback/teardown */
  124. int ao_append_option(ao_option **options, const char *key, 
  125.              const char *value);
  126. void ao_free_options(ao_option *options);
  127. ao_device* ao_open_live(int driver_id, ao_sample_format *format,
  128.                 ao_option *option);
  129. ao_device* ao_open_file(int driver_id, const char *filename, int overwrite,
  130.             ao_sample_format *format, ao_option *option);
  131.  
  132. int ao_play(ao_device *device, char *output_samples, uint_32 num_bytes);
  133. int ao_close(ao_device *device);
  134.  
  135. /* driver information */
  136. int ao_driver_id(const char *short_name);
  137. int ao_default_driver_id();
  138. ao_info *ao_driver_info(int driver_id);
  139. ao_info **ao_driver_info_list(int *driver_count);
  140. char *ao_file_extension(int driver_id);
  141.  
  142. /* miscellaneous */
  143. int ao_is_big_endian(void);
  144.  
  145.  
  146. #ifdef __cplusplus
  147. }
  148. #endif /* __cplusplus */
  149.  
  150. #endif  /* __AO_H__ */
  151.